package com.yundingai.utils;

import com.auth0.jwt.JWT;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.interfaces.DecodedJWT;
import com.yundingai.domain.entity.AllUser;
import com.yundingai.domain.vo.LoginVo;
import lombok.extern.slf4j.Slf4j;
import java.util.Date;

@Slf4j
public class JwtUtil {

    // JWT签名密钥
    private static final String SECRET = "secret";
    // JWT签发者标识
    private static final String ISSUER = "issuer";
    // Token前缀
    private static final String TOKEN_PREFIX = "Bearer ";

    /**
     * 生成Token
     * @param loginVo 包含用户登录信息的VO对象
     * @return 生成Token字符串
     */
    public static String generateToken(LoginVo loginVo) {
        Date now = new Date();
        Algorithm algorithm = Algorithm.HMAC256(SECRET);
        return JWT.create()
                .withIssuer(ISSUER)    // 设置签发者
                .withIssuedAt(now)     // 设置签发时间
                .withClaim("id",loginVo.getUserId())      // 添加用户ID
                .sign(algorithm);      // 使用算法签名
    }

    /**
     * 从Token中解析用户ID
     * @param token
     * @return 用户ID
     */
    public static Integer getUserId(String token) {
        try{
            // 解码Token，获取id并转为Integer
            return JWT.decode(token).getClaim("id").asInt();
        }catch (Exception e){
            log.error(e.getMessage());
        }
        return null;
    }

    /**
     * 处理Token前缀
     * @param token 可能带有"Bearer "前缀的Token字符串
     * @return 去除前缀后的纯净Token
     */
    public static String handlePrefix(String token){
        // 检查Token是否以"Bearer "开头
        if (token.startsWith(TOKEN_PREFIX)){
            //删除token中的前缀
            return token.replace(TOKEN_PREFIX,"");
        }
        return token;
    }
}
